package Game;

import java.awt.Color;
import java.awt.Component;
import java.awt.Cursor;
import java.awt.Desktop;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import java.io.FileWriter;
import java.io.IOException;

import static java.lang.System.*;

public class Login_window extends JFrame {
    // 创建对话框的方法，设置标题、大小和布局
    private static JDialog createDialog(String title, int width, int height) {
        JDialog dialog = new JDialog();
        dialog.setTitle(title);
        dialog.setSize(width, height);
        dialog.setLayout(new BoxLayout(dialog.getContentPane(), BoxLayout.Y_AXIS)); // 使用垂直布局
        dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); // 关闭对话框时释放资源
        return dialog;
    }

    public Login_window() {
        // 设置登录窗口的标题和大小
        this.setTitle("登录");
        this.setSize(400, 250);
        this.setLocationRelativeTo(null); // 窗口居中显示
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 关闭窗口时退出程序
        GridBagConstraints constraints = new GridBagConstraints(); // 创建布局约束
        constraints.insets = new Insets(5, 5, 5, 5); // 设置组件间的边距

        JLabel passwordLabel; // 用于后面定义标签

        // 尝试加载背景图片
        try {
            URL imageUrl = new URL("https://game.gtimg.cn/images/yxzj/zlkdatasys/images/image/20241023/17296703706615.jpg");
            InputStream in = imageUrl.openStream(); // 打开输入流
            BufferedImage backgroundImage = ImageIO.read(in); // 读取图片
            BackgroundPanel panel = new BackgroundPanel(backgroundImage); // 自定义的背景面板
            panel.setLayout(new GridBagLayout()); // 使用网格布局

            // 账号标签
            passwordLabel = new JLabel("(固定5个位的字符)账号：");
            panel.add(Box.createVerticalStrut(5)); // 添加垂直间距
            constraints.gridx = 0; // 设置x坐标
            constraints.gridy = 2; // 设置y坐标
            panel.add(passwordLabel, constraints); // 将标签添加到面板

            // 账号输入框
            JTextField accountField = new JTextField(20); // 创建文本框
            panel.add(Box.createVerticalStrut(10)); // 添加垂直间距
            constraints.gridx = 1; // 设置x坐标
            constraints.gridy = 2; // 设置y坐标
            panel.add(accountField, constraints); // 将输入框添加到面板

            // 密码标签
            passwordLabel = new JLabel("(固定8个位的字符)密码：");
            constraints.gridx = 0; // 设置x坐标
            constraints.gridy = 3; // 设置y坐标
            panel.add(passwordLabel, constraints); // 将标签添加到面板

            // 密码输入框
            JPasswordField passwordField = new JPasswordField(20); // 创建密码框
            constraints.gridx = 1; // 设置x坐标
            constraints.gridy = 3; // 设置y坐标
            panel.add(passwordField, constraints); // 将输入框添加到面板

            // 登录按钮
            JButton loginButton = new JButton("登录"); // 创建按钮
            loginButton.addActionListener(new ActionListener() { // 添加监听器
                public void actionPerformed(ActionEvent e) {
                    File file = new File("./registerdata.txt"); // 指定用户数据文件
                    Scanner scanner = null; // 声明扫描器
                    try {
                        String name1 = accountField.getText(); // 获取输入的账号
                        String password1 = new String(passwordField.getPassword()); // 获取输入的密码
                        scanner = new Scanner(file); // 创建扫描器读取文件
                        int flag = 0; // 标志位，表示账号是否存在

                        // 循环读取文件中的每一行
                        while (scanner.hasNextLine()) {
                            String line = scanner.nextLine(); // 读取一行
                            String nameinput = line.substring(0, 5); // 提取账号
                            if (nameinput.equals(name1)) { // 检查账号是否匹配
                                flag = 1; // 账号存在
                                String passwordinput = line.substring(18, 26); // 提取密码
                                if (passwordinput.equals(password1)) { // 检查密码是否匹配
                                    Login_window.this.setVisible(false); // 隐藏登录窗口
                                    (new Start()).setVisible(true); // 显示游戏窗口
                                } else {
                                    JOptionPane.showMessageDialog(panel, "密码错误！"); // 显示密码错误提示
                                }
                            }
                        }
                        if (flag == 0) { // 如果账号不存在
                            JOptionPane.showMessageDialog(panel, "账号不存在，请先注册！"); // 显示账号不存在提示
                        }
                    } catch (FileNotFoundException g) {
                        g.printStackTrace(); // 打印异常信息
                    }
                }
            });
            constraints.gridx = 0; // 设置x坐标
            constraints.gridy = 4; // 设置y坐标
            constraints.gridwidth = 2; // 占用两列
            panel.add(loginButton, constraints); // 将按钮添加到面板

            // 注册标签
            JLabel registerLabel = new JLabel("没有账号？点击这里注册");
            registerLabel.setForeground(Color.BLUE); // 设置文字颜色
            registerLabel.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); // 设置鼠标光标样式
            registerLabel.addMouseListener(new MouseAdapter() { // 添加鼠标点击事件
                public void mouseClicked(MouseEvent e) {
                    try {
                        JDialog registerDialog = Login_window.createDialog("Register", 400, 350); // 创建注册对话框
                        JTextField usernameField = new JTextField(20); // 账号输入框
                        JTextField userphonenumField = new JTextField(20); // 手机号输入框
                        JPasswordField passwordField = new JPasswordField(20); // 密码输入框
                        JPasswordField confirmPasswordField = new JPasswordField(20); // 确认密码输入框
                        JButton registerButton = new JButton("注册"); // 注册按钮

                        // 添加组件到注册对话框
                        registerDialog.add(new JLabel("(固定5个位的字符)账号:"));
                        registerDialog.add(Box.createVerticalStrut(5));
                        registerDialog.add(usernameField);
                        registerDialog.add(Box.createVerticalStrut(10));
                        registerDialog.add(new JLabel("(固定11位的数字)捆绑的手机号:"));
                        registerDialog.add(Box.createVerticalStrut(5));
                        registerDialog.add(userphonenumField);
                        registerDialog.add(Box.createVerticalStrut(10));
                        registerDialog.add(new JLabel("(固定8个位的字符)密码:"));
                        registerDialog.add(Box.createVerticalStrut(5));
                        registerDialog.add(passwordField);
                        registerDialog.add(Box.createVerticalStrut(10));
                        registerDialog.add(new JLabel("(固定8个位的字符)再次确认密码:"));
                        registerDialog.add(Box.createVerticalStrut(5));
                        registerDialog.add(confirmPasswordField);
                        registerDialog.add(Box.createVerticalStrut(10));
                        registerDialog.add(registerButton);

                        // 注册按钮的点击事件
                        registerButton.addActionListener((z) -> {
                            String username = usernameField.getText(); // 获取用户名
                            String userphonenum = userphonenumField.getText(); // 获取手机号
                            String password = new String(passwordField.getPassword()); // 获取密码
                            String confirmPassword = new String(confirmPasswordField.getPassword()); // 获取确认密码

                            // 将信息组合成一行字符串
                            String sum = username + " " + userphonenum + " " + password;
                            try {
                                FileWriter writer = new FileWriter("./registerdata.txt", true); // 追加模式写入文件
                                writer.write(sum + '\n'); // 写入用户信息
                                writer.close(); // 关闭文件写入流
                            } catch (IOException r) {
                                r.printStackTrace(); // 打印异常信息
                            }

                            // 检查输入的有效性
                            if (password.equals(confirmPassword) && !"".equals(username) && !"".equals(userphonenum) && !"".equals(password)) {
                                JOptionPane.showMessageDialog(registerDialog, "注册账户成功！"); // 注册成功提示
                                registerDialog.dispose(); // 关闭注册对话框
                            } else if (!"".equals(username) && !"".equals(userphonenum) && !"".equals(password)) {
                                JOptionPane.showMessageDialog(registerDialog, "前后密码输入不一！"); // 密码不一致提示
                            } else {
                                JOptionPane.showMessageDialog(registerDialog, "请先填写完整信息！"); // 填写不完整提示
                            }
                        });
                        registerDialog.setVisible(true); // 显示注册对话框
                    } catch (Exception var8) {
                        var8.printStackTrace(); // 打印异常信息
                        JOptionPane.showMessageDialog(Login_window.this, "无法打开注册链接！"); // 显示错误提示
                    }
                }
            });

            // 将注册标签添加到面板
            constraints.gridx = 0; // 设置x坐标
            constraints.gridy = 6; // 设置y坐标
            constraints.gridwidth = 2; // 占用两列
            panel.add(registerLabel, constraints); // 添加到面板

            this.add(panel); // 将面板添加到窗口
        } catch (IOException var12) {
            var12.printStackTrace(); // 打印异常信息
            this.getContentPane().setBackground(Color.LIGHT_GRAY); // 设置背景颜色
            JOptionPane.showMessageDialog(this, "无法加载背景图片！"); // 显示错误提示
            this.setTitle("登录"); // 设置标题
            this.setSize(400, 250); // 设置大小
            this.setLocationRelativeTo(null); // 窗口居中
            this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); // 设置关闭操作

            // 创建没有背景的登录面板
            JPanel panel = new JPanel();
            panel.setLayout(new GridBagLayout()); // 使用网格布局
            constraints.insets = new Insets(5, 5, 5, 5); // 设置组件间的边距

            // 账号标签
            JLabel accountLabel = new JLabel("(固定5个位的字符)账号：");
            constraints.gridx = 0; // 设置x坐标
            constraints.gridy = 0; // 设置y坐标
            panel.add(accountLabel, constraints); // 添加标签到面板

            // 账号输入框
            JTextField accountField = new JTextField(20); // 创建文本框
            constraints.gridx = 1; // 设置x坐标
            constraints.gridy = 0; // 设置y坐标
            panel.add(accountField, constraints); // 添加到面板

            // 密码标签
            passwordLabel = new JLabel("(固定8个位的字符)密码：");
            constraints.gridx = 0; // 设置x坐标
            constraints.gridy = 1; // 设置y坐标
            panel.add(passwordLabel, constraints); // 添加标签到面板

            // 密码输入框
            JPasswordField passwordField = new JPasswordField(20); // 创建密码框
            constraints.gridx = 1; // 设置x坐标
            constraints.gridy = 1; // 设置y坐标
            panel.add(passwordField, constraints); // 添加到面板

            // 登录按钮
            JButton loginButton = new JButton("登录"); // 创建按钮
            loginButton.addActionListener(new ActionListener() { // 添加监听器
                public void actionPerformed(ActionEvent e) {
                    Login_window.this.setVisible(false); // 隐藏登录窗口
                    (new Start()).setVisible(true); // 显示游戏窗口
                }
            });
            constraints.gridx = 0; // 设置x坐标
            constraints.gridy = 6; // 设置y坐标
            constraints.gridwidth = 2; // 占用两列
            panel.add(loginButton, constraints); // 添加按钮到面板

            // 注册标签
            JLabel registerLabel = new JLabel("没有账号？点击这里注册");
            registerLabel.setForeground(Color.BLUE); // 设置文字颜色
            registerLabel.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); // 设置鼠标光标样式
            registerLabel.addMouseListener(new MouseAdapter() { // 添加鼠标点击事件
                public void mouseClicked(MouseEvent e) {
                    try {
                        Desktop.getDesktop().browse(new URI("file:///Z:/1111/ZombieCrisis-master/loginweb.html")); // 打开注册页面
                    } catch (Exception var3) {
                        var3.printStackTrace(); // 打印异常信息
                        JOptionPane.showMessageDialog(Login_window.this, "无法打开注册链接！"); // 显示错误提示
                    }
                }
            });

            constraints.gridx = 0; // 设置x坐标
            constraints.gridy = 3; // 设置y坐标
            constraints.gridwidth = 2; // 占用两列
            panel.add(registerLabel, constraints); // 添加注册标签到面板
            this.add(panel); // 将面板添加到窗口
        }
    }
}
